# @Filename:    SingleAttribute
# @Author:      王佳伟
# @Time:        2025-02-19 15:07
# @Describe:    单属性查找 - 以禅道为例
from selenium import webdriver
from selenium.webdriver.common.by import By

class SingleAttribute:
    def __init__(self):
        # 创建一个Chrome浏览器的WebDriver示例
        self.driver = webdriver.Chrome()
        # ChromeOptions类提供了对Chrome浏览器各种选项进行配置的方法;
        # 在excludeSwitches参数中，将enable-logging指定为要排除的选项，表示不启用浏览器的日志功能
        # options = webdriver.ChromeOptions()
        # options.add_experimental_option('excludeSwitches', ['enable-logging'])
        # self.drive = webdriver.Chrome(options=options)
        # 最大化窗口
        self.driver.maximize_window()
        # 隐式等待，设置最大的等待时长，只对查找元素（find_elementXXX）生效
        self.driver.implicitly_wait(2)

    def method(self):
        """代码执行"""
        # 通过get()方法打开网页
        self.driver.get('http://192.168.100.210/zentao/')

        # 1.用 id 属性定位查找
        self.driver.find_element(By.ID, "account")

        # 2.用 name 属性定位查找
        self.driver.find_element(By.NAME, "account")

        # 3.用 class 属性定位查找
        self.driver.find_element(By.CLASS_NAME, "form-control")

        # 4.用 xpath 属性定位查找
        self.driver.find_element(By.XPATH, '//*[@id="account"]')

        # 5.具有给定标签名称的第一个元素将被返回
        self.driver.find_element(By.TAG_NAME, "input")

        # 6.用 css 属性定位查找
        # 方法一[标签名]
        self.driver.find_element(By.CSS_SELECTOR, 'input')
        # 方法二[id], #代表id
        self.driver.find_element(By.CSS_SELECTOR, '#account')
        # 方法三[class], .代表class
        self.driver.find_element(By.CSS_SELECTOR, '.form-control')
        # 方法四[其他属性]
        self.driver.find_element(By.CSS_SELECTOR, '[name="account"]')

        # 7.链接文本值与位置匹配的第一个元素将被返回
        # (通过标签对之间的文本进行定位)
        self.driver.find_element(By.LINK_TEXT, "忘记密码")

        # 8.具有部分链接文本值与位置匹配的第一个元素将被返回
        # (partial link其实是对link的一个扩展，因为有些时候链接文本很长，这时候就可以使用其中的一部分来进行定位)
        self.driver.find_element(By.PARTIAL_LINK_TEXT, "忘记")

